
forget wordArray
create wordArray 350 cells allot \ holds addresses of words
create  lenArray 350 chars allot \ holds lengths of words

: dump-words ( -- wordCount )
    locals{ da wa wl cnt }
    0 set cnt
    latest @ set da
    ." Filling array..."
    begin 
        da @ 0<> while
            da $a000 u< if
                da 4 + set wa
                wa wordArray cnt cells + !
                da 2+ @ 15 and set wl
                wl  lenArray cnt + c!
                1 +set cnt
            then
        da @ set da
    repeat
    cr ." Words: " cnt . cnt ;
    
: sort-words ( wordCount -- )
    \ simple bubble sort 
    locals{ wc swaps } set wc
    cr ." Sorting..."
    0 \ flag for screen display
    begin 
        10 2 gotoxy 
        not dup if ascii x else ascii + then emit
        0 set swaps
        wc 1- 0 do
            lenArray i + c@
            lenArray i + 1+ c@
            2dup > if
                lenArray i + c!
                lenArray i + 1+ c!
                wordArray i cells + @
                wordArray i cells + 2+ @
                wordArray i cells + !
                wordArray i cells + 2+ !
                1 +set swaps
            else 2drop then
        loop
    swaps 0= until
    drop ( drop display flag ) ;
    
: name>pad ( wa wl -- )
    dup pad c! 
    0 do
        dup i + c@ 
        pad i + 1+ c!
    loop drop ;
    
fbuf: wordsFile
: words-to-file ( wordCount -- )
    locals{ wa wl }
    cr ." Writing to file..."
    s" DSK3.WORDS.TXT DV80SO" wordsFile file
    wordsFile #open abort" Cant open file"
    0 do
        wordArray i cells + @
        lenArray i + c@
        name>pad
        pad count wordsFile #put abort" Cant write to file"
    loop
    wordsFile #close ;

: go
    page
    dump-words
    dup sort-words
    words-to-file
    cr ." All done!" ;
go
